package com.zrrd.learn.chapter02;

/**
 * 学习位运算
 *
 * @author asus
 * @version 1.0
 * @date 2023/4/15 9:21
 */
public class LearnOptions03 {

    public static void main(String[] args) {
        //正整数 有符号与无符号右移是相同
        System.out.println(3>>>1);
        System.out.println(3>>1);

        //补码：符号位不变，数值位按位取反，末尾+1
        //反码：原码按位取反
        //补码的补码等于原码

        //负数
        System.out.println(-15 >> 2);
        System.out.println(-3 >> 1);
        //10000011 原码
        //11111101 补码
        //11111110  运算后的补码
        //10000010   -2
        System.out.println(-5 >> 2);
        System.out.println(-23 >> 3);

        //无符号的负数右移（符号位参与运算）
        System.out.println(-3 >>> 1);
        //10000011 原码
        //11111101 补码
        //01111110   前面补0

        //&相同位数同时为1 则为1
        //|相同位数有一个为1 则为1
        //^相同位数不相同为1 相同为0
        //~对一个数取反
        System.out.println(2 & 3);
        System.out.println(18 & 27);

        //&&短逻辑与 一假为假 全真为真（短路）
        //||短逻辑或 一真为真  （短路）
    }
}
